import { createParamDecorator, ExecutionContext } from '@nestjs/common'

/**
 * 表格查询参数装饰器：自动解析分页参数并补充分页计算结果
 * 从请求 query 中提取 pageNo/pageSize，默认值为 1 和 10
 * 自动计算 skip (偏移量)和 take(查询数量)，并合并原始 query 返回
 */
export const TableQuery = createParamDecorator((_: any, context: ExecutionContext) => {
  // 获取原始查询参数
  const request = context.switchToHttp().getRequest<ExpressRequest>()
  const originQuery = request.query as Recordable
  // 解析页码（默认第1页）
  const pageNo = originQuery.pageNo ? +originQuery.pageNo : 1
  // 解析每页条数（默认10条）
  const pageSize = originQuery.pageSize ? +originQuery.pageSize : 10
  // 计算分页偏移量（跳过前面多少条）
  const skip: number = (pageNo - 1) * pageSize
  // 计算当前页查询条数
  const take: number = pageSize
  // 合并原始参数与分页参数
  const query = { pageNo, pageSize, skip, take }
  return { ...originQuery, ...query }
})
